home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / misc / emu / Apex-src.lha / ASM.DOC < prev    next >
Text File  |  2001-09-30  |  11KB  |  328 lines

  1. ASM.DOC        AUG-21-86
  2.  
  3.              USING THE 68000 ASSEMBLER
  4.  
  5.  
  6. This document describes the operation of the 68000 assembler; it does
  7. not describe the 68000 instruction set. It is assumed that you are
  8. already familiar with programming in assembly language.
  9.  
  10.  
  11. SYNTAX
  12.  
  13. A line of assembly code can have one or more of the following fields.
  14. Fields are separated by tabs or spaces.
  15.  
  16.     LABEL    OPCODE    OPERAND     ;COMMENT
  17.  
  18. If a label is used, it must start in the first column. Label names must
  19. start with a letter (A-Z or a-z) and can consist of letters, numbers
  20. (0-9), or underlines (_). The assembler makes no distinction between
  21. uppercase and lowercase letters (except in strings). Names can be as
  22. long as you want, but only the first eight characters are recognized.
  23.  
  24. The opcode field begins anywhere after the first column, to distinguish
  25. it from a label. An opcode may be either a 68000 instruction name or
  26. one of the pseudo-ops described later on.
  27.  
  28. An operand is typically an effective address for a 68000 instruction.
  29. An operand can be a simple label name or it can be a complex
  30. expression. An operand must always be preceded by an opcode. 
  31.  
  32. The last field on the line is the comment field. You can use any
  33. characters here, but they must be preceded by a semicolon (;). Since
  34. any of the fields may be blank, a comment might be used as the only
  35. field on the line. Comments can start anywhere, even in the first
  36. column. Blank lines are treated as comments.
  37.  
  38. An expression is evaluated the same way as in XPL except that brackets
  39. "[]" are used instead of parentheses "()" (parentheses are reserved for
  40. indexing). Space characters can be used within expressions to make them
  41. more readable. All numeric values are signed, 32-bit integers in the
  42. range -2,147,483,648 through +2,147,483,647. 
  43.  
  44. The order in which an expression is evaluated can affect its value. The
  45. assembler performs the operations with the highest precedence first. If
  46. operators have the same precedence then the order of evaluation is from
  47. left to right. Expressions within brackets are always evaluated first.
  48.  
  49.     PRECEDENCE    OPERATOR
  50.         1          [  ]
  51.         2          unary  +  -
  52.         3          *  /  \
  53.         4          +  -
  54.         5          =  #  >  <  >=  <=
  55.         6          ~
  56.         7          &
  57.         8          !
  58.  
  59.  
  60. A precise definition of the syntax is given by the syntax diagrams. 
  61.  
  62.  
  63. PSEUDO-OPS
  64.  
  65. In addition to the 68000 opcodes, there are pseudo opcodes (pseudo-ops)
  66. which are commands to the assembler.
  67.  
  68.     ORG    EXPRESSION    Sets the program counter to the value of
  69.                 the expression. If a label is used, it
  70.                 will have the value of the expression.
  71.  
  72. LABEL    EQU    EXPRESSION    Sets the label to the value of the
  73.                 expression. A label defined by EQU
  74.                 cannot be redefined. (Forward references
  75.                 are allowed, but they are risky.)
  76.  
  77.     NOLIST            Turns off the listing device.
  78.  
  79.     LIST            Turns on the listing device.
  80.  
  81.     PAGE            Sends a form feed to the listing device,
  82.                 which moves it to the top of the next
  83.                 page.
  84.  
  85.     DC._    EXPRESSION    Defines a constant value to be loaded
  86.                 into the current memory location. A
  87.                 size must be specified: .B, .W, or .L.
  88.                 Multiple values can be specified by
  89.                 additional expressions separated by
  90.                 commas.
  91.  
  92.     DS._    EXPRESSION    Defines storage space. The amount of
  93.                 space is equal to the value of the
  94.                 expression times the number of bytes
  95.                 in the size specification. The loader
  96.                 (LOAD) does not affect these locations.
  97.  
  98.     DCB._    TIMES,VALUE    Defines a block of constants. VALUE is
  99.                 an expression giving the value of the
  100.                 constant. TIMES is the number of times
  101.                 the constant value is repeated.
  102.  
  103.     ASCII    "STRING"    Defines a block of constant bytes equal
  104.                 to the ASCII values of the string
  105.                 enclosed in quote marks. Bit 7 is always
  106.                 clear. If the string contains a double
  107.                 quote (") then enclose the string in
  108.                 single quotes ('). If the string con-
  109.                 tains an apostrophe (') then enclose the
  110.                 string in double quotes. If the closing
  111.                 quote mark is omitted then a carriage
  112.                 return will be included in the string.
  113.  
  114.     IF    EXPRESSION    Turns off the assembler under certain
  115.                 conditions. If the expression evaluates
  116.                 to false (= 0) then the lines of assem-
  117.                 bly code up to ELSE or ENDIF are treated
  118.                 as comments.
  119.  
  120.     ELSE            Reverses the condition of a preceding IF.
  121.  
  122.     ENDIF            Turns on the assembler.
  123.  
  124.     INCLUDE    3:FILENAME.68K    Inserts code from another file. The unit
  125.                 and extension can be specified, but they
  126.                 default to the input unit and ".68K". A
  127.                 label name cannot be used for the unit.
  128.  
  129.     END            Indicates the end of the program.
  130.  
  131.  
  132.  
  133. ASSEMBLING A PROGRAM
  134.  
  135. After a program has been created, it can be assembled by typing the
  136. command:
  137.  
  138.     APX>ASM file name
  139.  
  140. Where "file name" is the name of your program. (Note that a space
  141. character is sufficient if the default file name is set up.)
  142.  
  143. The assembler begins by asking if you want to change the defaults.
  144. Unless you want a listing, enter "N" (or just RETURN). Your program
  145. will be assembled. If an error is detected, a message will be
  146. displayed.
  147.  
  148. If there are no errors then the .OBJ output file may be loaded into
  149. memory by typing the command:
  150.  
  151.     APX>LOAD file name
  152.  
  153. When the loader is finished, it will display:
  154.  
  155.     PRESS "RETURN" TO EXECUTE
  156.     (OR CTRL-P TO SAVE)
  157.  
  158. If your program has set up the start vector at location $400, you can
  159. press RETURN to start it. You may however, prefer to press RESET and
  160. use the monitor to run or test your program. Programs that set up the
  161. required Apex system parameters, USRMEM ($432) and PROSIZ ($436), may
  162. be made into .SAV files by first pressing CTRL-P and then entering:
  163.  
  164.     APX>SAVE file name
  165.  
  166. If you do want a listing, you will need to change the defaults as
  167. follows:
  168.  
  169.     At the message: CHANGE DEFAULTS (N/Y)?,           enter: Y
  170.     At the message: DEVICE NUMBERS (OBJECT, LISTING)?, enter: 3,2
  171.     At the message: DO CROSS REFERENCE (N/Y)?,       enter: Y
  172.     At the message: CHANGE DEFAULTS (N/Y)?,           enter: N
  173.  
  174.  
  175.  
  176. RESERVED NAMES
  177.  
  178. These names have special meaning to the assembler and cannot be used as
  179. label names:
  180.  
  181.     D0 - D7        Data registers
  182.     A0 - A7        Address registers
  183.     SP        Stack pointer (same as A7)
  184.     CCR        Condition code register
  185.     SR        Status register
  186.     USP        User stack pointer
  187.     SSP        Supervisor stack pointer
  188.     PC        Program counter
  189.  
  190.  
  191.  
  192. EFFECTIVE ADDRESS MODES
  193.  
  194. The addressing modes are:
  195.  
  196.     Dn        Data register direct
  197.     An        Address register direct
  198.     (An)        Address register indirect
  199.     (An)+        Address register indirect with postincrement
  200.  
  201.     -(An)        Address register indirect with predecrement
  202.     d(An)        Address register indirect with displacement
  203.     d(An,Xn)    Address register indirect with index
  204.     Abs.W        Absolute short (word)
  205.  
  206.     Abs.L        Absolute long
  207.     d(PC)        Program counter with displacement
  208.     d(PC,Xn)    Program counter with index
  209.     #<xxx>        Immediate (size depends on opcode size)
  210.  
  211. The displacement (d) is +/-32767, except when used with indexing, where
  212. it is +/-127. The index register (Xn) can be any register (D0-D7 or
  213. A0-A7). The size of the index register can be specified by either ".W"
  214. or ".L". The assembler consistently defaults to the word size (.W)
  215. everywhere that a size can be specified.
  216.  
  217.  
  218. CHARACTER SUMMARY
  219.  
  220. The assembler uses the following characters. (Expression operations are
  221. performed on all 32 bits unless indicated otherwise.)
  222.  
  223.     +    Addition and unary plus
  224.     -    Subtraction and unary minus
  225.     *    Multiplication (16 * 16 = 32 bits)
  226.     /    Division (32 / 16 = 16 bits)
  227.     \    Remainder (32 \ 16 = 16 bits)
  228.  
  229.     &    Logical "and" operation
  230.     !    Logical "or" operation
  231.     ~    Logical "not" operation
  232.  
  233.     $    Hex value
  234.     @    Current program counter (PC) value
  235.     ' "    ASCII character value or string
  236.  
  237.     ;    Comment delimiter
  238.     #    Immediate address mode
  239.     ()    Enclose indirect or index registers
  240.     []    Enclose subexpressions
  241.  
  242.     =    Equal
  243.     #    Not equal
  244.     >    Greater than
  245.     <    Less than
  246.     >=    Greater than or equal
  247.     <=    Less than or equal
  248.  
  249.     .    Size specifier: .B .W .L .S
  250.     ,    Parameter separator
  251.     A-Z    Characters that can be used in a name
  252.     a-z
  253.     _    (Underline)
  254.     0-9
  255.     :    Label definition (optional)
  256.  
  257.     ^    (Not used)
  258.     ?    (Not used)
  259.  
  260.  
  261.  
  262. MOTOROLA STANDARD
  263.  
  264. An attempt has been made to be compatible with the assembly-language
  265. standard defined by Motorola. However, ASM.XPL has features not defined
  266. by Motorola, and Motorola has features that are incompatible with the
  267. design of ASM.XPL. This section describes the differences.
  268.  
  269. In ASM.XPL all comments must be preceded by a semicolon (;). An asterisk
  270. (*) cannot be used because of the way expressions are parsed. (Motorola
  271. does not allow space characters inside expressions.)
  272.  
  273. In ASM.XPL an at-sign (@) is used to represent the current program
  274. counter (PC) value. (An asterisk would have worked, but it was too con-
  275. fusing in expressions such as: "**2" or "N3/*+2".) An at-sign cannot be
  276. used to represent octal numbers, and there is no octal representation.
  277.  
  278. In ASM.XPL labels must always start in the first column. Also the case
  279. of a letter is ignored; for example, the following names are the same:
  280. frog, FROG, FrOg.
  281.  
  282. ASM.XPL does not implement the shift operators, "<<" and ">>". (In
  283. almost all cases these may be replaced by multiplication and division
  284. by powers of 2.)
  285.  
  286. The following Motorola pseudo-ops are not implemented:
  287.  
  288.     SECTION            LLEN
  289.     RORG            PLEN
  290.     OFFSET            TTL
  291.     EQUR            NOOBJ
  292.     REG            FAIL
  293.     SET            FORMAT
  294.     NOL            NOFORMAT
  295.     SPC            MASK2
  296.     NOPAGE            IDNT
  297.  
  298. Currently ASM.XPL has no macro capability. Also there is no linker; the
  299. .OBJ files are loaded directly.
  300.  
  301. ASM.XPL assumes that the printer handler formats the page, thus the
  302. page-formatting pseudo-ops such as LLEN and PLEN are incompatable.
  303.  
  304. ASM.XPL implements conditional-assembly pseudo-ops in a completely
  305. different way than Motorola does. Also ASCII strings are completely
  306. different.
  307.  
  308. ASM.XPL has no special "local" labels.
  309.  
  310. In ASM.XPL branches always default to ".L" unless ".S" is specified,
  311. even when references are within range of the ".S" specification.
  312.  
  313. In ASM.XPL there is no optimization of opcodes such as converting
  314. "ADD #3,D5" to "ADDQ #3,D5".
  315.  
  316. In ASM.XPL all address modes must be explicitly stated. Thus, there is
  317. no implied relative addressing. For example, "MOVE #3,FROG" is not
  318. automatically converted to "MOVE #3,FROG-@(PC)".
  319.  
  320. In ASM.XPL syntax is strictly checked. For example, "MOVE #3,A0" is
  321. flagged because it should be "MOVEA #3,A0". (MOVE and MOVEA perform
  322. significantly different operations which should not be confused.)
  323.  
  324. ASM.XPL always defaults to the word size, ".W", consistent with the
  325. Motorola standard. Beware of assemblers that don't. A program that
  326. works with one assembler may not work when it is assembled by another.
  327. dard. Beware of assemblers that don't. A program that
  328. works with one assembler may not work when it is asse